######################################################################
# File: server/mudserver.py                        Part of DjangoMUD #
#                                                                    #
# Copyright (C) 2010, Joachim Pileborg.                              #
# All rights reserved.                                               #
#                                                                    #
# Redistribution and use in source and binary forms, with or without #
# modification, are permitted provided that the following conditions #
# are met:                                                           #
#                                                                    #
#   o Redistributions of source code must retain the above copyright #
#     notice, this list of conditions and the following disclaimer.  #
#   o Redistributions in binary form must reproduce the above        #
#     copyright notice, this list of conditions and the following    #
#     disclaimer in the documentation and/or other materials         #
#     provided with the distribution.                                #
#   o Neither the name of the author nor the names of its            #
#     contributors may be used to endorse or promote products        #
#     derived from this software without specific prior written      #
#     permission.                                                    #
#                                                                    #
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND             #
# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,        #
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF           #
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE           #
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS  #
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,#
# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,           #
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY       #
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR     #
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF #
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF    #
# SUCH DAMAGE.                                                       #
######################################################################

from django.conf import settings

from djangomud.server.server import BaseServer

######################################################################

class MUDServer(BaseServer):
    reactor = None
    telnet_addr = settings.DEFAULT_TELNET_ADDR
    telnet_port = settings.DEFAULT_TELNET_ADDR

    def install_reactor(self):
        try:
            from twisted.internet import kqreactor
            kqreactor.install()
        except ImportError:
            pass

        try:
            from twisted.internet import epollreactor
            epollreactor.install()
        except ImportError:
            pass

        from twisted.internet import reactor
        self.reactor = reactor

    def init_addrs_and_ports(self):
        from djangomud.server.net.telnet import TelnetProtocolFactory
        TelnetProtocolFactory.addr = self.telnet_addr
        TelnetProtocolFactory.port = int(self.telnet_port)

    def run(self):
        self.install_reactor()

        self.init_addrs_and_ports()

        # Activate ticker
        from djangomud.server.ticker import Ticker
        Ticker().run()

        # Initialise all protocols the server uses
        from djangomud.server.net import protocols
        protocols.init()

        # TODO: More stuff?

        # Start the whole event loop going
        self.reactor.run(installSignalHandlers=False)

        # TODO: Clean up, like saving all players etc.

######################################################################
